package core.modules.configuration;

import core.exceptions.BadPasswordException;


/**
 * @author DoomThrower
 *
 */
public class Crypto {
	/**
	 * 
	 */
	private static Crypto instance;

	/**
	 * Pole, wykorzystywane jako weryfikacja
	 */
	private String verificationLine = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
			+ System.lineSeparator();

	/**
	 * @return zwraca instancje obiektu klasy Crypto
	 */
	public static Crypto getInstance() {
		if (instance == null) {
			synchronized (Crypto.class) {
				if (instance == null)
					instance = new Crypto();
			}
		}
		return instance;
	}

	/**
	 * @param data dane do zaszyfrowania
	 * @param password haslo szyfrujace
	 * @return 
	 */
	public String encrypt(String data, String password) {
		// TODO: faktyczne szyfrowanie
		return data;
	}

	/**
	 * @param data
	 * @param password
	 * @return
	 */
	public String decrypt(String data, String password) throws BadPasswordException {
		// TODO: faktyczne deszyfrowanie
		return data;
	}

	/**
	 * @param data
	 * @return
	 */
	public String addVerificationLine(String data) {
		return verificationLine + data;
	}

	/**
	 * @param data
	 * @return
	 */
	public String removeVerificationLine(String data) {
		return verify(data) ? data.substring(verificationLine.length()) : data;
	}

	/**
	 * @param data
	 * @return
	 */
	public boolean verify(String data) {
		if(data.length() < verificationLine.length()) {
			return false;
		} else {
			return (verificationLine.compareTo(data.substring(0,
					verificationLine.length())) == 0);
		}
	}
}
